/*********************************************************************************************//**
* \file lienSerieMC.h
* \author Daneluzzi F., Pelloux-Prayer J., Battandier P.
* \version 1
* \date janvier 2012
* \brief Bibliothèque contenant les fonctions utilisées pour la gestion de l'USART.
* \defgroup usart_group Module USART
* @{
*************************************************************************************************/
#ifndef H_LIENSERIEMC
#define H_LIENSERIEMC

#include <usart.h>
#include "../Util/gestionTempsMC.h"
#include "../Util/config.h"

#define TIMEOUT_WTD -1
#define CAR_RECU 1

/*!
 * \fn initialisationUSART
 * \brief Initialisation de l'USART sélectionné#define
 *
 * Le paramètre permet de déterminer le port à initialiser.
 * \param [in] port : Numéro du port à initialiser.
 */
void initialisationUSART (unsigned char port);

/*!
 * \fn emission
 * \brief Écriture sur le port série
 *
 * Le paramètre permet de déterminer le port sur lequel écrire.
 * \param [in] port   : Numéro du port où écrire
 * \param [in] donnee : Données à écrire
 */
void emission(unsigned char port, char donnee);

/*!
 * \fn reception
 * \brief Lecture sur le port série
 *
 * Le paramètre permet de déterminer le port sur lequel lire.
 * \param [in]  port    : Numéro du port où lire
 * \param [out] donnee  : Données lues
 * \param [in]  timeout : Durée maximale de lecture
 */
char reception (unsigned char port, char *donnee, unsigned int timeOut);

/*! \addtogroup PORT_SERIE_1
 * \brief Définition du port série 1
 *  @{
 */

/*! \def OverrunErrorUSART1
 *  \brief Détection des erreurs d'écrasement de données
 */
#define OverrunErrorUSART1       RCSTA1bits.OERR1
/*! \def ResetUSART1
 *  \brief Remise à zéro de l'USART (RAZ des bits d'erreur)
 */
#define ResetUSART1              RCSTA1bits.CREN1

/*! \def initialisationUSART1
 *  \brief Appel de la fonction initialisationUSART avec le paramètre 1
 */
#define initialisationUSART1()   initialisationUSART(1)

/*! \def EmissionUSART1
 *  \brief Appel de la fonction emission avec le paramètre port = 1
 */
//#define EmissionUSART1(s, t)     emission(1, s, t)
/*! \def Emission1CarUSART1
 *  \brief Appel de la fonction emission avec le paramètre port = 1, taille = 1
 */
//#define Emission1CarUSART1(s)    emission(1, s, 1)
#define Emission1CarUSART1(s)    emission(1, s)
/*! \def ReceptionUSART1
 *  \brief Appel de la fonction reception avec le paramètre port = 1
 */
#define ReceptionUSART1(s, t)    reception(1, s, t)
/*! @}*/

#ifdef __18LF25K22
/*! \addtogroup PORT_SERIE_2
 *  \brief Définition du port série 2
 *  @{
 */

/*! \def OverrunErrorUSART2
 *  \brief Détection des erreurs d'écrasement de données
 */
#define OverrunErrorUSART2       RCSTA2bits.OERR2
/*! \def ResetUSART2
 *  \brief Remise à zéro de l'USART (RAZ des bits d'erreur)
 */
#define ResetUSART2              RCSTA2bits.CREN2

/*! \def initialisationUSART2
 *  \brief Appel de la fonction initialisationUSART avec le paramètre 2
 */
#define initialisationUSART2()   initialisationUSART(2)

/*! \def EmissionUSART2
 *  \brief Appel de la fonction emission avec le paramètre port = 2
 */
//#define EmissionUSART2(s, t)     emission(2, s, t)
/*! \def Emission1CarUSART2
 *  \brief Appel de la fonction emission avec le paramètre port = 2, taille = 1
 */
//#define Emission1CarUSART2(s)    emission(2, s, 1)
#define Emission1CarUSART2(s)    emission(2, s)
/*! \def ReceptionUSART2
 *  \brief Appel de la fonction reception avec le paramètre port = 2
 */
#define ReceptionUSART2(s, t)    reception(2, s, t)
/*! @}*/
#endif


#if FOSC_INT_HF
    #if FOSC_INT_HF_16MHz
        #define SPRGB_9600 103
    #elif FOSC_INT_HF_8MHz
        #define SPRGB_9600 51
        #define SPRGB_2400 207
    #elif FOSC_INT_HF_4MHz
        #define SPRGB_9600 25
        #define SPRGB_2400 103
        #define SPRGB_1200 207
    #elif FOSC_INT_HF_2MHz
        #define SPRGB_9600 12
        #define SPRGB_2400 51
        #define SPRGB_1200 103
    #elif FOSC_INT_HF_1MHz
        #define SPRGB_2400 25
        #define SPRGB_1200 51
    #elif FOSC_INT_HF_500kHz
        #define SPRGB_2400 12
        #define SPRGB_1200 25
    #elif FOSC_INT_HF_250kHz
        #define SPRGB_2400 5
        #define SPRGB_1200 12
    #else
        #define SPRGB_300 5
        #define SPRGB_150 12
    #endif
#elif FOSC_INT_MF
    #if FOSC_INT_MF_500kHz
        #define SPRGB_9600 25
    #elif FOSC_INT_MF_250kHz
        #define SPRGB_9600 25
    #else
        #define SPRGB_9600 25
    #endif
#else
    #define SPRGB_9600 25
#endif

/** @}*/
#endif
